import JSEncrypt from "jsencrypt";
import type { AxiosResponse, InternalAxiosRequestConfig } from "axios";
class RsaUtil{
    public static init(){
       this.serviceJs.setPublicKey(this.publicKey);
    }
    //公钥 服务端有该公钥对应的私钥 用于客户端向服务端发送加密信息
    public static publicKey=`MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYMMVNzzhIRKmWpH9g/QgSmzMdMiIwgO14DVZ5O+DvfnCwoHfrN8Z3ivLRoc00mP8O9EfdDJb1AkH1vlfyHstSN3GKso2dzwrwKTXlD+3d4APaFW3GFy/6Yi+kPsdldhMx46x+bwbwlmGcRs98iTZjiyrmZ2UzgOzYXebLR7pT4wIDAQAB`;
     //私钥 用于解密服务端发送到客户端的加密信息

    private static serviceJs=new JSEncrypt();

   //对对象内的key 和value进行加密 加密为base64的字符串
        static encryptOjbect(data:any){
        if(data===null||data===undefined||data==="") return "";
        let encryptData:any=null;
        if(data instanceof Object){
            if(data instanceof Array){//如果目标是数组类型
                encryptData=[];
                for(let key in data){//加密
                    encryptData[key]=this.encryptOjbect(data[key]);
                }
            }
            else{
                encryptData={};
                for(let key in data){//加密
                    encryptData[this.encrypt(key)]=this.encryptOjbect(data[key]);
                }
            }
            
        }
        else{//如果不是对象类型 那么直接加密 并且返回
            encryptData=this.encrypt(data);
        }
        return encryptData;
    }
    //加密为base64的字符串
    static encrypt(data:string):string{//发往服务端的消息加密
        if(data===null||data===undefined||data==="") return "";
        if(!(typeof data=="string")){
            data=JSON.stringify(data);
        }
        return this.serviceJs.encrypt(data) as string;
    }
}
RsaUtil.init()
export default RsaUtil;